const router = require('express').Router();
const Jwt = require('../../common/token/jwt');
const articleModel = require('../../model/articleModel')

// 发布文章的接口
// URL: /api/article/publish
// 参数：token , classify_text, article_title, article_content, article_create_time, article_author, article_address , article_src
router.post('/publish', async (req, res) => {
    // 获取token
    let token = req.body.token || req.headers.token;
    // 验证token
    let result = new Jwt(token).verifyToken();
    let { classify_text, article_title, article_content, article_create_time, article_author, article_address , article_src, classify_title} = req.body;

    //排查错误
    // console.log({ classify_text, article_title, article_content, article_create_time, article_author, article_address })
    // 登录状态
    if (result.code == 200) {
         // 从登录临时身份获取from_user_id
         let user_id = result.info.data;
        //  加一层判断，减少报错
        if (classify_text && article_title && article_content && article_create_time && article_author && article_address) {
            // 文章id
            // article_id, 
            let str = 'abcdefghijklmnopqrstuvxwyz'
            str = str + str.toUpperCase();
            let arr = str.split("");
            arr.sort(() => Math.random() - .5);
            let newStr = arr.join("");
            let article_id = (Math.random().toString().slice(2)) + "_" + newStr + "_" + (new Date().getTime().toString().slice(6))
            // classify_text, article_title, article_content,article_create_time,article_author,article_address,classify_title(二级分类名称)
            await articleModel.publish(article_id, classify_text, article_title, article_content, article_create_time, article_author, article_address,article_src,classify_title,user_id)
                .then(
                    (content) => {
                        res.send(content);
                    },
                    (err) => {
                        res.send(err);
                    }
                )
        }
        else {
            res.send({
                code: 404,
                msg: '缺少参数。'
            })
        }
    }
    else {
        res.send({
            code: -1,
            msg: '登录失效,请重新登录。'
        })
    }

})

// 删除文章的接口
// URL: /api/article/delete
// 参数：token , id, article_id
router.post('/delete', async (req, res) => {
    // 获取token
    let token = req.body.token || req.headers.token;
    // 验证token
    let result = new Jwt(token).verifyToken();
    // 登录状态
    if (result.code == 200) {
        // 接收前端的参数
        let {id, article_id} = req.body;
        if(id && article_id) {
            await articleModel.delete (id, article_id)
            .then(
                (content)=>{
                    res.send(content)
                },
                (error)=> {
                    res.send(error)
                }
            )

        }
        else {
            res.send({
                code: -1,
                msg: '删除文章，缺少参数'
            })
        }
       
    }
    else {
        res.send({
            code: -1,
            msg: '登录失效,请重新登录。'
        })
    }

})

// 文章列表接口
// 获取分类的文章
// URL: /api/article/list
// 参数：classify_text , page, pageSize
router.get('/list', async (req, res) => {
    let { classify_text , page, pageSize } = req.query;
    console.log("classify_text:",classify_text)
    if(classify_text && page && pageSize) {
        await articleModel.list(classify_text , page, pageSize).then(
            (content)=>{
                res.send(content)
            },
            (error)=> {
                res.send(error)
            }
        )
    }
    else {
        res.send({
            code: -1,
            msg: '缺少参数。'
        })
    }
})

// 获取所有的文章
// URL: /api/article/items
// 参数：page, pageSize
router.get('/items', async (req, res) => {
    let {page, pageSize } = req.query;
    if(page && pageSize) {
        await articleModel.items(page, pageSize).then(
            (content)=>{
                res.send(content)
            },
            (error)=> {
                res.send(error)
            }
        )
    }
    else {
        res.send({
            code: -1,
            msg: '缺少参数。'
        })
    }
})

// 文章详情接口
// URL: /api/article/detail
router.get('/detail', async (req, res) => {
    let { article_id } = req.query;
    if(article_id){
        await articleModel.detail(article_id)
        .then(
            (content)=>{
                res.send(content);
            },
            (error)=>{
                res.send(error);
            }
        )
    }
    else {
        res.send({
            code: -1,
            msg: '缺少参数。'
        });
    }
})



// 通过关键字 搜索文章接口
// URL: /api/article/search
// 参数：keyword
router.get('/search', async (req, res) => {
    let { keyword } = req.query;
    if(keyword){
        await articleModel.search(keyword)
        .then(
            (content)=>{
                // 响应数据
                res.send(content);
            },
            (error)=>{
                res.send(error);
            }
        )
    }
    else {
        res.send({
            code: -1,
            msg: '缺少参数。'
        });
    }
})

// 根据所有文章数量
router.get('/total', async (req,res)=> {
    // 获取文章信息
    await articleModel.total().then(
        (content) => {
            // 响应数据给前端
            res.send(content)
        },
        (err) => {
            res.send(err)
        }
    )
})

// 根据所有用户
router.get('/total_article_classify', async (req,res)=> {
    let { classify_text } = req.query;
    if(classify_text) {
         // 获取文章分类数量
        await articleModel.total_article_classify(classify_text).then(
            (content) => {
                // 响应数据给前端
                res.send(content)
            },
            (err) => {
                res.send(err)
            }
        )
    }
    else {
        res.send({
            code: -1,
            msg: '缺少参数。'
        })
    }
   
})

// 获取一级/二级分类文章列表接口
// 获取分类的文章
// URL: /api/article/list
// 参数：classify_text , page, pageSize
router.get('/list_child', async (req, res) => {
    let { classify_text,classify_title , page, pageSize } = req.query;
    // console.log("x:",classify_text,classify_title)
    if(classify_text && page && pageSize && classify_title) {
        await articleModel.list_child(classify_text,classify_title, page, pageSize).then(
            (content)=>{
                res.send(content)
            },
            (error)=> {
                res.send(error)
            }
        )
    }
    else {
        res.send({
            code: -1,
            msg: '缺少参数。'
        })
    }
})

// 审核文章的接口
// URL: /api/article/examine
// 参数：token , id, article_status
router.post('/examine', async (req, res) => {
    // 获取token
    let token = req.body.token || req.headers.token;
    // 验证token
    let result = new Jwt(token).verifyToken();
    // 登录状态
    if (result.code == 200) {
        // 接收前端的参数
        let {id, article_status} = req.body;
        if(id && article_status) {
            await articleModel.examine (id, article_status)
            .then(
                (content)=>{
                    res.send(content)
                },
                (error)=> {
                    res.send(error)
                }
            )

        }
        else {
            res.send({
                code: -1,
                msg: '审核文章，缺少参数'
            })
        }
       
    }
    else {
        res.send({
            code: -1,
            msg: '登录失效,请重新登录。'
        })
    }

})


// 设置热门文章的接口
// URL: /api/article/hot_article
// 参数：token , id, article_hot
router.post('/hot_article', async (req, res) => {
    // 获取token
    let token = req.body.token || req.headers.token;
    // 验证token
    let result = new Jwt(token).verifyToken();
    // 登录状态
    if (result.code == 200) {
        // 接收前端的参数
        let {id, article_hot} = req.body;
        if(id && article_hot) {
            await articleModel.hot_article (id, article_hot)
            .then(
                (content)=>{
                    res.send(content)
                },
                (error)=> {
                    res.send(error)
                }
            )

        }
        else {
            res.send({
                code: -1,
                msg: '审核文章，缺少参数'
            })
        }
       
    }
    else {
        res.send({
            code: -1,
            msg: '登录失效,请重新登录。'
        })
    }

})

// 获取热门的文章
// URL: /api/article/hot_items
// 参数：page, pageSize
router.get('/hot_items', async (req, res) => {
    let {page, pageSize } = req.query;
    if(page && pageSize) {
        await articleModel.hot_items(page, pageSize).then(
            (content)=>{
                res.send(content)
            },
            (error)=> {
                res.send(error)
            }
        )
    }
    else {
        res.send({
            code: -1,
            msg: '缺少参数。'
        })
    }
})

// 获取通过审核的文章
// URL: /api/article/hot_items
// 参数：page, pageSize
router.get('/examine_items', async (req, res) => {
    let {page, pageSize } = req.query;
    if(page && pageSize) {
        await articleModel.examine_items(page, pageSize).then(
            (content)=>{
                res.send(content)
            },
            (error)=> {
                res.send(error)
            }
        )
    }
    else {
        res.send({
            code: -1,
            msg: '缺少参数。'
        })
    }
})

module.exports = router;